home *** CD-ROM | disk | FTP | other *** search
/ Sun Solutions 2000 #2 / Sun Solutions CD (Volume 2 2000)(Special Focus - Java Technologies)(Disc 1).ISO / products / Software / TornadoLabsLimited / book / KeyNavigateTest / RandomWalkBehavior.java < prev    next >
Text File  |  2000-02-12  |  3KB  |  102 lines

  1. /*
  2. //*****************************************************************************
  3. /*
  4. *    @(#) RandomWalkBehavior.java
  5. *
  6. *    Project:        Java 3D Programming
  7. *    Client:        Manning Publications
  8. *
  9. *    Copyright (c) 1999 Daniel Selman 
  10. *    All Rights Reserved.
  11. *
  12. *    @author Daniel Selman: dselman@tornadolabs.com
  13. */
  14. //*****************************************************************************
  15.  
  16. import java.applet.Applet;
  17. import java.awt.*;
  18. import java.awt.event.*;
  19.  
  20. import javax.media.j3d.*;
  21. import javax.vecmath.*;
  22.  
  23. import com.tornadolabs.dselman.j3d.book.*;
  24.  
  25. class RandomWalkBehavior extends Behavior
  26. {
  27.     // the wake up condition for the behavior
  28.     protected WakeupCondition        m_WakeupCondition = null;
  29.     protected TransformGroup        m_TransformGroup = null;
  30.     
  31.     protected Transform3D            m_Transform3D = null;
  32.     
  33.     protected Vector3d                TargetVector3d = null;
  34.     protected Vector3d                CurrentVector3d = null;
  35.     
  36.     private final double             m_MovementX = 2;
  37.     private final double                m_MovementY = 0;
  38.     private final double                m_MovementZ = 2;
  39.     
  40.     private int                         m_nFrameCount = 0;
  41.     
  42.     private CollisionChecker        m_CollisionChecker = null;
  43.  
  44.     
  45.     public RandomWalkBehavior( TransformGroup tg, CollisionDetector detector )
  46.     {
  47.         m_TransformGroup = tg;
  48.         
  49.         m_CollisionChecker = new CollisionChecker( tg, detector, false );
  50.         
  51.         m_Transform3D = new Transform3D();
  52.         
  53.         TargetVector3d = new Vector3d();
  54.         CurrentVector3d = new Vector3d();
  55.         
  56.         // create the WakeupCriterion for the behavior
  57.         WakeupCriterion criterionArray[] = new WakeupCriterion[1];
  58.         criterionArray[0] = new WakeupOnElapsedTime( 100 );
  59.         
  60.         // save the WakeupCriterion for the behavior
  61.         m_WakeupCondition = new WakeupOr( criterionArray );
  62.     }
  63.     
  64.     public void initialize()
  65.     {
  66.         // apply the initial WakeupCriterion
  67.         wakeupOn( m_WakeupCondition );
  68.     }
  69.  
  70.     public void processStimulus( java.util.Enumeration criteria )
  71.     {                
  72.        while( criteria.hasMoreElements() )
  73.         {
  74.             WakeupCriterion wakeUp = (WakeupCriterion) criteria.nextElement();            
  75.             
  76.             if( wakeUp instanceof WakeupOnElapsedTime )
  77.             {
  78.                 if( m_nFrameCount % 100 == 0 )
  79.                 {
  80.                     // generate a random direction for movement
  81.                     TargetVector3d.x = m_MovementX * Utils.getRandomNumber( 0, 1 );
  82.                     TargetVector3d.y = m_MovementY * Utils.getRandomNumber( 0, 1 );
  83.                     TargetVector3d.z = m_MovementZ * Utils.getRandomNumber( 0, 1 );
  84.                 }
  85.                 
  86.                 CurrentVector3d.x += TargetVector3d.x * Utils.getRandomNumber( 1, 0.1 );
  87.                 CurrentVector3d.y += TargetVector3d.y * Utils.getRandomNumber( 1, 0.1 );
  88.                 CurrentVector3d.z += TargetVector3d.z * Utils.getRandomNumber( 1, 0.1 );
  89.                 
  90.                 m_Transform3D.setTranslation( CurrentVector3d );
  91.                 
  92.                 if( m_CollisionChecker.isCollision( m_Transform3D ) == false )
  93.                     m_TransformGroup.setTransform(m_Transform3D);        
  94.                             
  95.                 m_nFrameCount++;
  96.             }            
  97.         }
  98.         
  99.         // assign the next WakeUpCondition, so we are notified again
  100.         wakeupOn( m_WakeupCondition );
  101.     }
  102. }